// / http对象, 通过他可以创建服务器, 设置端口号
var http = require('http');

// url对象, 可以解析url中的内容
var url = require('url');

// 查询参数对象, 可以处理查询参数
var qs = require('querystring');

//req: request, 请求对象, 可以拿到前端的请求数据
// req: response, 响应对象, 可以把一些信息发送给前端
http.createServer(function(req, res) {
    // req.setEncoding('utf8');
    // 对请求对象的url进行解析, 拿到?后面的查询参数字符串
            // req.setEncoding('utf8')
    if (req.url != '/favicon.ico') {
        var query = url.parse(req.url).query;
        // console.log(query);
        // console.log(22);
        // 把查询参数字符串转化成对象, 方便取值
        var queryObj = qs.parse(query);
        // console.log(queryObj);
        // console.log(queryObj.myUrl);

        // console.log(queryObj.myUrl);
        // console.log(queryObj.key);
        // console.log(queryObj.type);
        // console.log(queryObj.doctype);
        // console.log(queryObj.version);
        // console.log(queryObj.q);
        if (queryObj.myUrl) {
            // console.log('notnul');
        }
        var myUrl = queryObj.myUrl+'&key='+queryObj.key+'&type='+queryObj.type+'&doctype='+queryObj.doctype+'&version='+queryObj.version+'&q='+queryObj.q;
        // console.log('myUrl'+myUrl);
        // console.log(11);
        // 用来接收数据的变量
      
        console.log(myUrl);
        var resultData = '';
        // req.setEncoding('gb2312');
        // req.setEncoding(null);
         // myUrl.setEncoding('utf8');
         // 中文的时候需要解析  ，所以这里直接给转换成服务器可以识别
        function url_encode(url){
            url = encodeURIComponent(url);
            url = url.replace(/\%3A/g, ":");
            url = url.replace(/\%2F/g, "/");
            url = url.replace(/\%3F/g, "?");
            url = url.replace(/\%3D/g, "=");
            url = url.replace(/\%26/g, "&");
            
            return url;
        }
        myUrl=url_encode(myUrl);
        console.log(111111);
        console.log(myUrl);
        http.get(myUrl, function(response) {
            console.log(111);
            console.log('--------------'+myUrl);
            //设置编码格式

            // console.log('response-------'+response.statusCode+response.headers);
            response.setEncoding('utf8');
            // const contentType = response.headers['content-type'];

            // console.log(22+contentType);
            // 监测到有数据返回, 就会回调第二个参数(函数), result是返回的数据
            response.on('data', function(result) {
                // var a=JSON.parse(result).query;
                // console.log(a+'-----'+result);
                // console.info();
                console.log(result);
                // console.info();
                // 由于数据不是一次全部接收完毕, 该方法会调用很对次, 需要把数据拼接到resultData中、
                resultData += result;
            });

            // 数据全部就收完成以后执行操作
            response.on('end', function() {
                // console.log(resultData);
                // 需要把所有数据包括到 回调函数中, 返回给前端
                // 注意把resultData转化成字符串
                var str = queryObj.callback + '(' +resultData+ ')';
                // console.log(str);

                // 请求数据结束, 响应数据(把数据发送给请求者)
                // var resultData=JSON.parse(resultData);
                res.end(str);
                // console.log('------------------');
                // console.log(str);
                // console.log(resultData);
                // console.log(typeof(resultData));
            });
        }).on('error', function(e) {
            // 请求数据失败, 把错误信息发送给请求者
            res.end(e.message);

        });
    }


}).listen(2000);

console.log('http server is listening at port 2000');